
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta charset="utf-8"></meta>
      <meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
      <title>17.4.&nbsp;Deprecated: Full Text Search - Chapter&nbsp;17.&nbsp;Text and Lookup Indexes</title>
      <link rel="stylesheet" type="text/css" href="../../docbook.css"></link>
      <link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></link>
      <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css"></link>
      <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css"></link>
      <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans:400,300,400italic,600,300italic"></link>
      <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.11.0/codemirror.min.css"></link>
      <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.11.0/theme/neo.min.css"></link>
      <link rel="stylesheet" type="text/css" href="../../css/chunked-base.css"></link>
      <link rel="stylesheet" type="text/css" href="../../css/extra.css"></link><script src="//code.jquery.com/jquery-1.12.4.js" type="text/javascript"></script><script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js" type="text/javascript"></script><script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script><script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.11.0/codemirror.min.js" type="text/javascript"></script><script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.11.0/addon/runmode/runmode.min.js" type="text/javascript"></script><script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.11.0/mode/cypher/cypher.min.js" type="text/javascript"></script><script src="../../javascript/datatable.js" type="text/javascript"></script><script src="../../javascript/colorize.js" type="text/javascript"></script><script src="../../javascript/tabs-for-chunked.js" type="text/javascript"></script><script src="../../javascript/mp-nav.js" type="text/javascript"></script><script src="../../javascript/versionswitcher.js" type="text/javascript"></script><script src="../../javascript/version.js" type="text/javascript"></script><script src="//s3-eu-west-1.amazonaws.com/alpha.neohq.net/docs/new-manual/assets/search.js" type="text/javascript"></script><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"></meta>
      <link rel="prev" href="../manual-indexes/" title="17.2.&nbsp;Deprecated: Manual Indexes"></link>
      <link rel="next" href="../../algorithms/" title="Chapter&nbsp;18.&nbsp;Deprecated: Graph Algorithms"></link>
      <link rel="shortcut icon" href="https://neo4j.com/wp-content/themes/neo4jweb/favicon.ico"></link><script>
        $(document).ready(function() {
          CodeMirror.colorize();
          tabTheSource($('body'));
          var $header = $('header').first();
          $header.prepend(
            $('<a href="" id="logo"><img src="https://neo4j.com/wp-content/themes/neo4jweb/assets/images/neo4j-logo-2015.png" alt="Neo4j Logo"></img></a>')
          );
          var $sidebar = $('<div id="sidebar-wrapper"></div>');
          $.get('toc.html', function (d){
            $(d).appendTo($sidebar);
            highlightToc();
            highlightLibraryHeader();
          });
          $sidebar.insertAfter($('header').first());
        });
        </script></head>
   <body>
      <header>
         <div class="searchbox">
            <form id="search-form" class="search" name="search-form" role="search"><input id="search-form-input" name="q" title="search" type="search" lang="en" placeholder="Search Neo4j docs..." aria-label="Search Neo4j documentation" max-length="128" required="required"></input><input id="search-form-button" type="submit" value="Search"></input></form>
         </div>
         <ul class="documentation-library">
            <li><a href="https://neo4j.com/docs/operations-manual/current">Operations Manual</a></li>
            <li><a href="https://neo4j.com/docs/developer-manual/current/">Developer Manual</a></li>
            <li><a href="https://neo4j.com/docs/ogm-manual/current/">OGM Manual</a></li>
            <li><a href="https://neo4j.com/docs/graph-algorithms/current/">Graph Algorithms</a></li>
            <li><a href="https://neo4j-contrib.github.io/neo4j-apoc-procedures/3.4/">APOC</a></li>
            <li><a href="https://neo4j.com/docs/java-reference/current/">Java Reference</a></li>
         </ul>
         <nav id="header-nav"><span class="nav-previous"><a accesskey="p" href="../manual-indexes/"><span class="fa fa-long-arrow-left" aria-hidden="true"></span>Deprecated: Manual Indexes</a></span><span class="nav-current">
               <p class="nav-title hidden">17.4.&nbsp;Deprecated: Full Text Search</p></span><span class="nav-next"><a accesskey="n" href="../../algorithms/">Deprecated: Graph Algorithms<span class="fa fa-long-arrow-right" aria-hidden="true"></span></a></span></nav>
      </header>
      <div id="search-results" class="hidden"></div>
      <section class="section" id="fulltext-index">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title" style="clear: both"><a class="anchor" href="#fulltext-index"></a>17.4.&nbsp;Deprecated: Full Text Search
                  </h2>
               </div>
            </div>
         </div>
         <div class="admonitionblock warning">
            <table>
               <tbody>
                  <tr>
                     <td class="icon"><i class="fa icon-warning" title="warning"></i></td>
                     <td class="content">
                        <p>These Fulltext-Index procedures are deprecated and will be removed from APOC soon.
                           From version 3.5 Neo4j provides built-in, case-insensitive, configurable fulltext indices.
                        </p>
                     </td>
                  </tr>
               </tbody>
            </table>
         </div>
         <p>Indexes are used for finding nodes in the graph that further operations can then continue from.
            Just like in a book where you look at the index to find a section that interest you, and then start reading from there.
            A full text index allows you to find occurrences of individual words or phrases across all attributes.
         </p>
         <p>In order to use the full text search feature, we have to first index our data by specifying all the attributes we want to
            index.
            Here we create a full text index called <code class="literal">&#8220;locations&#8221;</code> (we will use this name when searching in the index) with our data.
         </p>
         <div class="admonitionblock note">
            <table>
               <tbody>
                  <tr>
                     <td class="icon"><i class="fa icon-note" title="note"></i></td>
                     <td class="content">
                        <p>by default these fulltext indexes do not automatically track changes you perform in your graph. See &#8230;&#8203;. for how to enabled
                           automatic index tracking.
                        </p>
                     </td>
                  </tr>
               </tbody>
            </table>
         </div><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.addAllNodes('locations',{
  Company: ["name", "description"],
  Person:  ["name","address"],
  Address: ["address"]})</code></pre><p>Creating the index will take a little while since the procedure has to read through the entire database to create the index.</p>
         <p>We can now use this index to search for nodes in the database.
            The most simple case would be to search across all data for a particular word.
         </p>
         <p>It does not matter which property that word exists in, any node that has that word in any of its indexed properties will be
            found.
         </p>
         <p>If you use a name in the call, all occurrences will be found (but limited to 100 results).</p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("locations", 'name')</code></pre><section class="section" id="_advanced_search">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a class="anchor" href="#_advanced_search"></a>17.4.1.&nbsp;Advanced Search
                     </h3>
                  </div>
               </div>
            </div>
            <p>We can further restrict our search to only searching in a particular attribute.
               In order to search for a <code class="literal">Person</code> with an address in <span class="strong"><strong>France</strong></span>, we use the following.
            </p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("locations", "Person.address:France")</code></pre><p>Now we can search for nodes with a specific property value, and then explore their neighbourhoods visually.</p>
            <p>But integrating it with an graph query is so much more powerful.</p>
         </section>
         <section class="section" id="_fulltext_and_graph_search">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a class="anchor" href="#_fulltext_and_graph_search"></a>17.4.2.&nbsp;Fulltext and Graph Search
                     </h3>
                  </div>
               </div>
            </div>
            <p>We could for instance search for addresses in the database that contain the word "Paris", and then find all companies registered
               at those addresses:
            </p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("locations", "Address.address:Paris~") YIELD node AS addr
MATCH (addr)&lt;-[:HAS_ADDRESS]-(company:Company)
RETURN company LIMIT 50</code></pre><p>The tilde (~) instructs the index search procedure to do a fuzzy match, allowing us to find "Paris" even if the spelling is
               slightly off.
            </p>
            <p>We might notice that there are addresses that contain the word &#8220;Paris&#8221; that are not in Paris, France.
               For example there might be a Paris Street somewhere.
            </p>
            <p>We can further specify that we want the text to contain both the word Paris, and the word France:</p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("locations", "+Address.address:Paris~ +France~")
YIELD node AS addr
MATCH (addr)&lt;-[:HAS_ADDRESS]-(company:Company)
RETURN company LIMIT 50</code></pre></section>
         <section class="section" id="_complex_searches">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a class="anchor" href="#_complex_searches"></a>17.4.3.&nbsp;Complex Searches
                     </h3>
                  </div>
               </div>
            </div>
            <p>Things start to get interesting when we look at how the different entities in Paris are connected to one another.
               We can do that by finding all the entities with addresses in Paris, then creating all pairs of such entities and finding the
               shortest path between each such pair:
            </p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("locations", "+Address.address:Paris~ +France~") YIELD node AS addr
MATCH (addr)&lt;-[:HAS_ADDRESS]-(company:Company)
WITH collect(company) AS companies

// create unique pairs
UNWIND companies AS x UNWIND companies AS y
WITH x, y WHERE ID(x) &lt; ID(y)

MATCH path = shortestPath((x)-[*..10]-(y))
RETURN path</code></pre><p>For more details on the query syntax used in the second parameter of the <code class="literal">search</code> procedure,
               please see <a class="link" href="http://www.lucenetutorial.com/lucene-query-syntax.html" target="_top">this Lucene query tutorial</a></p>
            <section class="section" id="_index_configuration">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a class="anchor" href="#_index_configuration"></a>17.4.3.1.&nbsp;Index Configuration
                        </h4>
                     </div>
                  </div>
               </div>
               <p><code class="literal">apoc.index.addAllNodes(&lt;name&gt;, &lt;labelPropsMap&gt;, &lt;option&gt;)</code> allows to fine tune your indexes using the options parameter defaulting to an empty map.
                  All <a class="link" href="https://neo4j.com/docs/java-reference/3.1/#indexing-create-advanced" target="_top">standard options</a> for <a class="link" href="https://neo4j.com/docs/java-reference/3.1/#indexing" target="_top">Neo4j manual indexes</a> are allowed plus apoc specific options:
               </p>
               <div class="informaltable">
                  <div class="table" id="d0e20627">
                     <table class="informaltable" border="1">
                        <colgroup>
                           <col class="col_1"></col>
                           <col class="col_2"></col>
                           <col class="col_3"></col>
                        </colgroup>
                        <thead>
                           <tr>
                              <th style="text-align: left; vertical-align: top; ">name</th>
                              <th style="text-align: left; vertical-align: top; ">value</th>
                              <th style="text-align: left; vertical-align: top; ">description</th>
                           </tr>
                        </thead>
                        <tbody>
                           <tr>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">type</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">fulltext/exact</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p>type of the index</p>
                              </td>
                           </tr>
                           <tr>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">to_lower_case</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">false/true</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p>if terms should be converted to lower case before indexing</p>
                              </td>
                           </tr>
                           <tr>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">analyzer</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">classname</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p>classname of lucene analyzer to be used for this index</p>
                              </td>
                           </tr>
                           <tr>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">similarity</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">classname</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p>classname for lucene similarity to be used for this index</p>
                              </td>
                           </tr>
                           <tr>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">autoUpdate</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p><code class="literal">true/false</code></p>
                              </td>
                              <td style="text-align: left; vertical-align: top; ">
                                 <p>if this index should be tracked for graph updates</p>
                              </td>
                           </tr>
                        </tbody>
                     </table>
                  </div>
               </div>
               <div class="admonitionblock note">
                  <table>
                     <tbody>
                        <tr>
                           <td class="icon"><i class="fa icon-note" title="note"></i></td>
                           <td class="content">
                              <p>An index configuration cannot be changed once the index is created.
                                 However subsequent invocations of <code class="literal">apoc.index.addAllNodes</code> will delete the index if existing and create it afterwards.
                              </p>
                           </td>
                        </tr>
                     </tbody>
                  </table>
               </div>
            </section>
         </section>
         <section class="section" id="_automatic_index_tracking_for_manual_indexes">
            <div class="titlepage">
               <div>
                  <div>
                     <h3 class="title"><a class="anchor" href="#_automatic_index_tracking_for_manual_indexes"></a>17.4.4.&nbsp;Automatic Index Tracking for Manual Indexes
                     </h3>
                  </div>
               </div>
            </div>
            <p>As mentioned above, <code class="literal">apoc.index.addAllNodes()</code> populates an fulltext index.
               But it does not track changes being made to the graph and reflect these changes to the index.
               You would have to rebuild that index regularly yourself.
            </p>
            <p>Or alternatively use the automatic index tracking, that keeps the index in sync with your graph changes.
               To enable this feature a two step configuration approach is required.
            </p>
            <div class="admonitionblock note">
               <table>
                  <tbody>
                     <tr>
                        <td class="icon"><i class="fa icon-note" title="note"></i></td>
                        <td class="content">
                           <p>Please note that there is a performance impact if you enable automatic index tracking.</p>
                        </td>
                     </tr>
                  </tbody>
               </table>
            </div>
            <p><span class="formalpara-title">in <code class="literal">neo4j.conf</code> set.&nbsp;</span>
               
            </p><pre class="programlisting highlight"><code data-lang="properties">apoc.autoIndex.enabled=true</code></pre><p>
               
            </p>
            <p>This global setting will initialize a transaction event handler to take care of reflecting changes of any added nodes, deleted
               nodes, changed properties to the indexes.
            </p>
            <p>In addition to enable index tracking globally using <code class="literal">apoc.autoIndex.enabled</code> each individual index must be configured as "trackable" by setting <code class="literal">autoUpdate:true</code> in the options when initially creating an index:
            </p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.addAllNodes('locations',{
  Company: ["name", "description"],
  Person:  ["name","address"],
  Address: ["address"]}, {autoUpdate:true})</code></pre><p>By default index tracking is done synchronously.
               That means updates to fulltext indexes are part of same transaction as the originating change (e.g. changing a node property).
               While this guarantees instant consistency it has an impact on performance.
            </p>
            <p>Alternatively, you can decide to perform index updates asynchronously in a separate thread by setting this flag in <code class="literal">neo4j.conf</code></p><pre class="programlisting highlight"><code data-lang="properties">apoc.autoIndex.async=true</code></pre><p>With this setting enabled, index updates are fed to a buffer queue that is consumed asynchronously using transaction batches.
               The batching can be further configured using
            </p><pre class="programlisting highlight"><code data-lang="properties">apoc.autoIndex.queue_capacity=100000
apoc.autoIndex.async_rollover_opscount=50000
apoc.autoIndex.async_rollover_millis=5000
apoc.autoIndex.tx_handler_stopwatch=false</code></pre><p>The values above are the default setting.
               In this example the index updates are consumed in transactions of maximum 50000 operations or 5000 milliseconds - whichever
               triggers first will cause the index update transaction to be committed and rolled over.
            </p>
            <p>If <code class="literal">apoc.autoIndex.tx_handler_stopwatch</code> is enabled, the time spent in <code class="literal">beforeCommit</code> and <code class="literal">afterCommit</code> is traced to <code class="literal">debug.log</code>.
               Use this setting only for diagnosis.
            </p>
            <section class="section" id="_a_worked_example_on_fulltext_index_tracking">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a class="anchor" href="#_a_worked_example_on_fulltext_index_tracking"></a>17.4.4.1.&nbsp;A Worked Example on Fulltext Index Tracking
                        </h4>
                     </div>
                  </div>
               </div>
               <p>This section provides a small but still usable example to understand automatic index updates.</p>
               <p>Make sure <code class="literal">apoc.autoIndex.enabled=true</code> is set.
                  First we create some nodes - note there&#8217;s no index yet.
               </p><pre class="programlisting highlight"><code data-lang="cypher">UNWIND ["Johnny Walker", "Jim Beam", "Jack Daniels"] as name CREATE (:Person{name:name})</code></pre><p>Now we index them:</p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.addAllNodes('people', { Person:["name"]}, {autoUpdate:true})</code></pre><p>Check if we can find "Johnny" - we expect one result.</p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("people", "Johnny") YIELD node, weight
RETURN node.name, weight</code></pre><p>Adding some more people - note, we have another "Johnny":</p><pre class="programlisting highlight"><code data-lang="cypher">UNWIND ["Johnny Rotten", "Axel Rose"] as name CREATE (:Person{name:name})</code></pre><p>Again we&#8217;re search for "Johnny", expecting now two of them:</p><pre class="programlisting highlight"><code data-lang="cypher">CALL apoc.index.search("people", "Johnny") YIELD node, weight
RETURN node.name, weight</code></pre></section>
            <section class="section" id="_fulltext_index_count">
               <div class="titlepage">
                  <div>
                     <div>
                        <h4 class="title"><a class="anchor" href="#_fulltext_index_count"></a>17.4.4.2.&nbsp;Fulltext index count
                        </h4>
                     </div>
                  </div>
               </div>
               <p>Accompanying UserFunctions that just return counts for nodes and relationships manual index</p><pre class="programlisting highlight"><code data-lang="cypher">apoc.index.nodes.count('Label','prop:value*') YIELD value</code></pre><pre class="programlisting highlight"><code data-lang="cypher">apoc.index.relationships.count('TYPE','prop:value*') YIELD value</code></pre><pre class="programlisting highlight"><code data-lang="cypher">apoc.index.between.count(node1,'TYPE',node2,'prop:value*') YIELD value</code></pre><pre class="programlisting highlight"><code data-lang="cypher">apoc.index.out.count(node,'TYPE','prop:value*') YIELD value</code></pre><pre class="programlisting highlight"><code data-lang="cypher">apoc.index.in.count(node,'TYPE','prop:value*') YIELD value</code></pre><section class="section" id="_some_example_with_the_userfunctions_describe_above">
                  <div class="titlepage">
                     <div>
                        <div>
                           <h5 class="title"><a class="anchor" href="#_some_example_with_the_userfunctions_describe_above"></a>Some example with the userFunctions describe above
                           </h5>
                        </div>
                     </div>
                  </div>
                  <p>First we create this set of data:</p><pre class="programlisting highlight"><code data-lang="cypher">CREATE (joe:Person:Hipster {name:'Joe',age:42})-[checkin:CHECKIN {on:'2015-12-01'}]-&gt;(philz:Place {name:'Philz'})
MATCH (p:Person) CALL apoc.index.addNode(p, ["name"]) RETURN count(*)
MATCH (p:Place) CALL apoc.index.addNode(p, ["name"]) RETURN count(*)
MATCH (person:Person)-[check:CHECKIN]-&gt;(place:Place) CALL apoc.index.addRelationship(check, ["on"]) RETURN count(*)</code></pre><div class="itemizedlist">
                     <ul class="itemizedlist" style="list-style-type: disc; ">
                        <li class="listitem">We call the apoc.index.nodes.count function as follow:</li>
                     </ul>
                  </div><pre class="programlisting highlight"><code data-lang="cypher">RETURN apoc.index.nodes.count('Person', 'name:Jo*') AS value</code></pre><p>The result is:</p>
                  <div class="informalfigure">
                     <div class="mediaobject"><img src="https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/3.4/docs/images/apoc.index.nodes.count.png" width="600" alt="apoc.index.nodes.count"></img></div>
                  </div>
                  <div class="itemizedlist">
                     <ul class="itemizedlist" style="list-style-type: disc; ">
                        <li class="listitem">We call the apoc.index.relationships.count function as follow:</li>
                     </ul>
                  </div><pre class="programlisting highlight"><code data-lang="cypher">RETURN apoc.index.relationships.count('CHECKIN', 'on:2015-*') as value</code></pre><p>The result is:</p>
                  <div class="informalfigure">
                     <div class="mediaobject"><img src="https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/3.4/docs/images/apoc.index.relationships.count.png" width="600" alt="apoc.index.relationships.count"></img></div>
                  </div>
                  <div class="itemizedlist">
                     <ul class="itemizedlist" style="list-style-type: disc; ">
                        <li class="listitem">We call the apoc.index.between.count function as follow:</li>
                     </ul>
                  </div><pre class="programlisting highlight"><code data-lang="cypher">MATCH (joe:Person:Hipster {name:'Joe',age:42}),(philz:Place {name:'Philz'}) WITH joe,philz RETURN apoc.index.between.count(joe, 'CHECKIN', philz, 'on:2015-*') as value</code></pre><p>The result is:</p>
                  <div class="informalfigure">
                     <div class="mediaobject"><img src="https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/3.4/docs/images/apoc.index.between.count.png" width="600" alt="apoc.index.between.count"></img></div>
                  </div>
                  <div class="itemizedlist">
                     <ul class="itemizedlist" style="list-style-type: disc; ">
                        <li class="listitem">We call the apoc.index.in.count function as follow:</li>
                     </ul>
                  </div><pre class="programlisting highlight"><code data-lang="cypher">MATCH (philz:Place {name:'Philz'}) WITH philz RETURN apoc.index.in.count(philz, 'CHECKIN','on:2015-*') as value</code></pre><p>The result is:</p>
                  <div class="informalfigure">
                     <div class="mediaobject"><img src="https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/3.4/docs/images/apoc.in.nodes.count.png" width="600" alt="apoc.in.nodes.count"></img></div>
                  </div>
                  <div class="itemizedlist">
                     <ul class="itemizedlist" style="list-style-type: disc; ">
                        <li class="listitem">We call the apoc.index.out.count function as follow:</li>
                     </ul>
                  </div><pre class="programlisting highlight"><code data-lang="cypher">MATCH (joe:Person:Hipster {name:'Joe',age:42}) WITH joe RETURN apoc.index.out.count(joe, 'CHECKIN','on:2015-*') as value</code></pre><p>The result is:</p>
                  <div class="informalfigure">
                     <div class="mediaobject"><img src="https://raw.githubusercontent.com/neo4j-contrib/neo4j-apoc-procedures/3.4/docs/images/apoc.index.out.count.png" width="600" alt="apoc.index.out.count"></img></div>
                  </div>
               </section>
            </section>
         </section>
      </section>
      <footer><script type="text/javascript">
          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
          //Allow Linker
          ga('create', 'UA-1192232-34','auto', {'allowLinker': true});
          ga('send', 'pageview');
          // Load the plugin.
          ga('require', 'linker');
          // Define which domains to autoLink.
          ga('linker:autoLink', ['neo4j.org','neo4j.com','neotechnology.com','graphdatabases.com','graphconnect.com']);
        </script><script type="text/javascript">
          document.write(unescape("%3Cscript src='//munchkin.marketo.net/munchkin.js' type='text/javascript'%3E%3C/script%3E"));
        </script><script>Munchkin.init('773-GON-065');</script></footer>
   </body>
</html>